home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / termsorc.lha / Extras / Source / term-source.lha / ASCIIPanel.c next >
C/C++ Source or Header  |  1995-09-26  |  9KB  |  444 lines

  1. /*
  2. **    ASCIIPanel.c
  3. **
  4. **    User interface for built-in ASCII transfer routines
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_BYTES=1000,GAD_INFORMATION,GAD_CHARDELAY,GAD_LINEDELAY,
  13.         GAD_PACING,GAD_QUIET_TRANSFER,GAD_SKIP,GAD_ABORT
  14.     };
  15.  
  16. STATIC struct LayoutHandle    *ASCIIHandle;
  17. STATIC struct List         MessageList;
  18. STATIC LONG             MessageCount;
  19.  
  20. STATIC STRPTR __saveds
  21. ShowTime(struct Gadget *SomeGadget,WORD Level)
  22. {
  23.     return(LocaleSeconds(Level));
  24. }
  25.  
  26. struct Window * __regargs
  27. CreateASCIIWindow(BYTE Send)
  28. {
  29.     struct IBox Bounds;
  30.  
  31.     NewList(&MessageList);
  32.  
  33.     MessageCount = 0;
  34.  
  35.     if(ASCIIHandle = LT_CreateHandleTags(Window -> WScreen,
  36.         LH_LocaleHook,    &LocaleHook,
  37.     TAG_DONE))
  38.     {
  39.         struct Window *PanelWindow;
  40.  
  41.         LT_New(ASCIIHandle,
  42.             LA_Type,    VERTICAL_KIND,
  43.         TAG_DONE);
  44.         {
  45.             LT_New(ASCIIHandle,
  46.                 LA_Type,    VERTICAL_KIND,
  47.                 LA_LabelID,    MSG_V36_0000,
  48.             TAG_DONE);
  49.             {
  50.                 LT_New(ASCIIHandle,
  51.                     LA_Type,        BOX_KIND,
  52.                     LA_ID,            GAD_BYTES,
  53.                     LABX_FirstLabel,    MSG_ASCIIPANEL_BYTES_GAD,
  54.                     LABX_LastLabel,        MSG_ASCIIPANEL_LINES_GAD,
  55.                     LABX_ReserveSpace,    TRUE,
  56.                     LA_Chars,        50,
  57.                 TAG_DONE);
  58.  
  59.                 LT_New(ASCIIHandle,
  60.                     LA_Type,        LISTVIEW_KIND,
  61.                     LA_LabelID,        MSG_ASCIIPANEL_INFORMATION_GAD,
  62.                     LA_LabelPlace,        PLACE_LEFT,
  63.                     LA_ID,            GAD_INFORMATION,
  64.                     LA_Lines,        2,
  65.                     LALV_MaxGrowX,        70,
  66.                     LALV_MaxGrowY,        10,
  67.                     LALV_CursorKey,        TRUE,
  68.                     GTLV_ReadOnly,        TRUE,
  69.                     GTLV_Labels,        &MessageList,
  70.                 TAG_DONE);
  71.  
  72.                 LT_EndGroup(ASCIIHandle);
  73.             }
  74.  
  75.             if(Send)
  76.             {
  77.                 LT_New(ASCIIHandle,
  78.                     LA_Type,        VERTICAL_KIND,
  79.                     LA_LabelID,        MSG_V36_0003,
  80.                     LAGR_LastAttributes,    TRUE,
  81.                 TAG_DONE);
  82.                 {
  83.                     LT_New(ASCIIHandle,
  84.                         LA_Type,        SliderType,
  85.                         LA_LabelID,        MSG_ASCIIPANEL_CHAR_DELAY_GAD,
  86.                         LA_ID,            GAD_CHARDELAY,
  87.                         GTSL_Min,        0,
  88.                         GTSL_Max,        10 * 100,
  89.                         LA_WORD,        &Config -> TransferConfig -> CharDelay,
  90.                         GTSL_LevelFormat,    "%s s",
  91.                         GTSL_DispFunc,        ShowTime,
  92.                     TAG_DONE);
  93.  
  94.                     LT_New(ASCIIHandle,
  95.                         LA_Type,        SliderType,
  96.                         LA_LabelID,        MSG_ASCIIPANEL_LINE_DELAY_GAD,
  97.                         LA_ID,            GAD_LINEDELAY,
  98.                         GTSL_Min,        0,
  99.                         GTSL_Max,        10 * 100,
  100.                         LA_WORD,        &Config -> TransferConfig -> LineDelay,
  101.                         GTSL_LevelFormat,    "%s s",
  102.                         GTSL_DispFunc,        ShowTime,
  103.                     TAG_DONE);
  104.  
  105.                     LT_New(ASCIIHandle,
  106.                         LA_Type,        CYCLE_KIND,
  107.                         LA_LabelID,        MSG_ASCIIPANEL_TEXT_PACING_GAD,
  108.                         LA_ID,            GAD_PACING,
  109.                         LA_UBYTE,        &Config -> TransferConfig -> PacingMode,
  110.                         LACY_FirstLabel,    MSG_ASCIIPANEL_DIRECT_TXT,
  111.                         LACY_LastLabel,        MSG_ASCIIPANEL_KEYDELAY_TXT,
  112.                     TAG_DONE);
  113.  
  114.                     LT_New(ASCIIHandle,
  115.                         LA_Type,        CHECKBOX_KIND,
  116.                         LA_LabelID,        MSG_ASCIIPANEL_QUIET_TRANSFER_GAD,
  117.                         LA_ID,            GAD_QUIET_TRANSFER,
  118.                         LA_BYTE,        &Config -> TransferConfig -> QuietTransfer,
  119.                     TAG_DONE);
  120.  
  121.                     LT_EndGroup(ASCIIHandle);
  122.                 }
  123.  
  124.                 LT_New(ASCIIHandle,
  125.                     LA_Type,VERTICAL_KIND,
  126.                 TAG_DONE);
  127.                 {
  128.                     LT_New(ASCIIHandle,
  129.                         LA_Type,    XBAR_KIND,
  130.                         LAXB_FullSize,    TRUE,
  131.                     TAG_DONE);
  132.  
  133.                     LT_EndGroup(ASCIIHandle);
  134.                 }
  135.  
  136.                 LT_New(ASCIIHandle,LA_Type,HORIZONTAL_KIND,
  137.                     LAGR_SameSize,    TRUE,
  138.                     LAGR_Spread,    TRUE,
  139.                 TAG_DONE);
  140.                 {
  141.                     LT_New(ASCIIHandle,
  142.                         LA_Type,    BUTTON_KIND,
  143.                         LA_LabelID,    MSG_TRANSFERPANEL_SKIP_CURRENT_FILE_GAD,
  144.                         LA_ID,        GAD_SKIP,
  145.                         LABT_ExtraFat,    TRUE,
  146.                     TAG_DONE);
  147.  
  148.                     LT_New(ASCIIHandle,
  149.                         LA_Type,    BUTTON_KIND,
  150.                         LA_LabelID,    MSG_TRANSFERPANEL_ABORT_ENTIRE_TRANSFER_GAD,
  151.                         LA_ID,        GAD_ABORT,
  152.                         LABT_ExtraFat,    TRUE,
  153.                     TAG_DONE);
  154.  
  155.                     LT_EndGroup(ASCIIHandle);
  156.                 }
  157.             }
  158.             else
  159.             {
  160.                 LT_New(ASCIIHandle,
  161.                     LA_Type,    VERTICAL_KIND,
  162.                 TAG_DONE);
  163.                 {
  164.                     LT_New(ASCIIHandle,LA_Type,XBAR_KIND,LAXB_FullSize,TRUE,TAG_DONE);
  165.  
  166.                     LT_EndGroup(ASCIIHandle);
  167.                 }
  168.  
  169.                 LT_New(ASCIIHandle,
  170.                     LA_Type,    HORIZONTAL_KIND,
  171.                 TAG_DONE);
  172.                 {
  173.                     LT_New(ASCIIHandle,
  174.                         LA_Type,    BUTTON_KIND,
  175.                         LA_LabelID,    MSG_TRANSFERPANEL_ABORT_ENTIRE_TRANSFER_GAD,
  176.                         LA_ID,        GAD_ABORT,
  177.                         LABT_ExtraFat,    TRUE,
  178.                     TAG_DONE);
  179.  
  180.                     LT_EndGroup(ASCIIHandle);
  181.                 }
  182.             }
  183.  
  184.             LT_EndGroup(ASCIIHandle);
  185.         }
  186.  
  187.         Bounds . Left    = WindowLeft + Window -> LeftEdge;
  188.         Bounds . Top    = WindowTop + Window -> TopEdge;
  189.         Bounds . Width    = WindowWidth;
  190.         Bounds . Height    = WindowHeight;
  191.  
  192.         if(PanelWindow = LT_Build(ASCIIHandle,
  193.             LAWN_TitleText,        Send ? LocaleString(MSG_ASCIIPANEL_SENDING_TXT) : LocaleString(MSG_ASCIIPANEL_RECEIVING_TXT),
  194.             LAWN_Bounds,        &Bounds,
  195.             LAWN_IDCMP,        IDCMP_CLOSEWINDOW,
  196.             LAWN_HelpHook,        &GuideHook,
  197. //            LAWN_Parent,        Window,
  198.             WA_DepthGadget,        TRUE,
  199.             WA_CloseGadget,        TRUE,
  200.             WA_DragBar,        TRUE,
  201.             WA_RMBTrap,        TRUE,
  202.             WA_SimpleRefresh,    TRUE,
  203.         TAG_DONE))
  204.         {
  205.             ULONG    IntuiLock = LockIBase(NULL);
  206.             BYTE    Activate,Move;
  207.  
  208.             GuideContext(CONTEXT_ASCII);
  209.  
  210.             if(Config -> MiscConfig -> AlertMode == ALERT_SCREEN || Config -> MiscConfig -> AlertMode == ALERT_BEEP_SCREEN)
  211.                 Move = Activate = TRUE;
  212.             else
  213.             {
  214.                 if(IntuitionBase -> ActiveScreen == PanelWindow -> WScreen)
  215.                     Activate = TRUE;
  216.                 else
  217.                     Activate = FALSE;
  218.             }
  219.  
  220.             UnlockIBase(IntuiLock);
  221.  
  222.             if(Move)
  223.             {
  224.                 if(PanelWindow -> WScreen -> LeftEdge > 0)
  225.                 {
  226.                     if(PanelWindow -> WScreen -> TopEdge > 0)
  227.                         MoveScreen(PanelWindow -> WScreen,-PanelWindow -> WScreen -> LeftEdge,-PanelWindow -> WScreen -> TopEdge);
  228.                     else
  229.                         MoveScreen(PanelWindow -> WScreen,-PanelWindow -> WScreen -> LeftEdge,0);
  230.                 }
  231.                 else
  232.                 {
  233.                     if(PanelWindow -> WScreen -> TopEdge > 0)
  234.                         MoveScreen(PanelWindow -> WScreen,0,-PanelWindow -> WScreen -> TopEdge);
  235.                 }
  236.  
  237.                 WindowToFront(PanelWindow);
  238.  
  239.                 ScreenToFront(PanelWindow -> WScreen);
  240.             }
  241.  
  242.             if(Activate)
  243.                 ActivateWindow(PanelWindow);
  244.  
  245.             PushWindow(PanelWindow);
  246.  
  247.             return(PanelWindow);
  248.         }
  249.  
  250.         LT_DeleteHandle(ASCIIHandle);
  251.  
  252.         ASCIIHandle = NULL;
  253.     }
  254.  
  255.     return(NULL);
  256. }
  257.  
  258. VOID __regargs
  259. DeleteASCIIWindow(struct Window *Window,BYTE WaitForIt)
  260. {
  261.     if(WaitForIt && Window && ASCIIHandle)
  262.     {
  263.         struct IntuiMessage    *Message;
  264.         BOOLEAN             Done = FALSE;
  265.         ULONG             MsgClass;
  266.         struct Gadget        *MsgGadget;
  267.         WORD             i;
  268.  
  269.         for(i = GAD_CHARDELAY ; i <= GAD_SKIP ; i++)
  270.             LT_SetAttributes(ASCIIHandle,i,GA_Disabled,TRUE,TAG_DONE);
  271.  
  272.         do
  273.         {
  274.             if(Wait(PORTMASK(Window -> UserPort) | SIG_BREAK) & SIG_BREAK)
  275.                 break;
  276.  
  277.             while(Message = (struct IntuiMessage *)LT_GetIMsg(ASCIIHandle))
  278.             {
  279.                 MsgClass    = Message -> Class;
  280.                 MsgGadget    = (struct Gadget *)Message -> IAddress;
  281.  
  282.                 LT_ReplyIMsg(Message);
  283.  
  284.                 if(MsgClass == IDCMP_CLOSEWINDOW || (MsgClass == IDCMP_GADGETUP && MsgGadget -> GadgetID == GAD_ABORT))
  285.                     Done = TRUE;
  286.             }
  287.         }
  288.         while(!Done);
  289.     }
  290.  
  291.     if(Window && ASCIIHandle)
  292.         PopWindow();
  293.  
  294.     if(ASCIIHandle)
  295.     {
  296.         LT_DeleteHandle(ASCIIHandle);
  297.  
  298.         ASCIIHandle = NULL;
  299.     }
  300.  
  301.     if(MessageCount)
  302.     {
  303.         FreeList(&MessageList);
  304.  
  305.         MessageCount = 0;
  306.     }
  307. }
  308.  
  309. VOID __stdargs
  310. AddASCIIMessage(struct Window *Window,STRPTR Message,...)
  311. {
  312.     STATIC UBYTE __far TempBuffer[256];
  313.  
  314.     struct Node    *Node;
  315.     va_list         VarArgs;
  316.  
  317.     va_start(VarArgs,Message);
  318.     VSPrintf(TempBuffer,Message,VarArgs);
  319.     va_end(VarArgs);
  320.  
  321.     if(Node = CreateNode(TempBuffer))
  322.     {
  323.         if(MessageCount == 100)
  324.         {
  325.             FreeVecPooled(RemHead(&MessageList));
  326.  
  327.             MessageCount = 99;
  328.         }
  329.  
  330.         LT_SetAttributes(ASCIIHandle,GAD_INFORMATION,
  331.             GTLV_Labels,~0,
  332.         TAG_DONE);
  333.  
  334.         AddTail(&MessageList,Node);
  335.  
  336.         LT_SetAttributes(ASCIIHandle,GAD_INFORMATION,
  337.             GTLV_Labels,        &MessageList,
  338.             GTLV_Top,        MessageCount,
  339.             GTLV_MakeVisible,    MessageCount,
  340.         TAG_DONE);
  341.  
  342.         MessageCount++;
  343.     }
  344. }
  345.  
  346. VOID __regargs
  347. UpdateASCIIWindow(struct Window *Window,LONG Bytes,LONG MaxBytes,LONG Lines)
  348. {
  349.     if(Bytes != -1)
  350.     {
  351.         UBYTE LocalBuffer[40];
  352.  
  353.         if(MaxBytes)
  354.         {
  355.             LONG Percent = (100 * Bytes) / MaxBytes;
  356.  
  357.             if(Percent > 100)
  358.                 Percent = 100;
  359.  
  360.             if(LocaleBase)
  361.                 SPrintf(LocalBuffer,"%lD (%ld%%)",Bytes,Percent);
  362.             else
  363.                 SPrintf(LocalBuffer,"%ld (%ld%%)",Bytes,Percent);
  364.         }
  365.         else
  366.             SPrintf(LocalBuffer,ConvNumber,Bytes);
  367.  
  368.         LT_SetAttributes(ASCIIHandle,GAD_BYTES,
  369.             LABX_Index,    0,
  370.             LABX_Text,    LocalBuffer,
  371.         TAG_DONE);
  372.     }
  373.  
  374.     if(Lines != -1)
  375.     {
  376.         UBYTE LocalBuffer[40];
  377.  
  378.         SPrintf(LocalBuffer,ConvNumber,Lines);
  379.  
  380.         LT_SetAttributes(ASCIIHandle,GAD_BYTES,
  381.             LABX_Index,    1,
  382.             LABX_Text,    LocalBuffer,
  383.         TAG_DONE);
  384.     }
  385. }
  386.  
  387. BYTE
  388. HandleASCIIWindow()
  389. {
  390.     struct IntuiMessage    *Message;
  391.     ULONG             MsgClass;
  392.     struct Gadget        *MsgGadget;
  393.  
  394.     while(Message = (struct IntuiMessage *)LT_GetIMsg(ASCIIHandle))
  395.     {
  396.         MsgClass    = Message -> Class;
  397.         MsgGadget    = (struct Gadget *)Message -> IAddress;
  398.  
  399.         LT_ReplyIMsg(Message);
  400.  
  401.         if(MsgClass == IDCMP_CLOSEWINDOW)
  402.             return(1);
  403.  
  404.         if(MsgClass == IDCMP_MOUSEMOVE)
  405.         {
  406.             SendSetup();
  407.  
  408.             ConfigChanged = TRUE;
  409.         }
  410.  
  411.         if(MsgClass == IDCMP_GADGETUP)
  412.         {
  413.             switch(MsgGadget -> GadgetID)
  414.             {
  415.                 case GAD_PACING:
  416.                 case GAD_CHARDELAY:
  417.                 case GAD_LINEDELAY:
  418.  
  419.                     ASCIISendSetup();
  420.  
  421.                     ConfigChanged = TRUE;
  422.  
  423.                     break;
  424.  
  425.                 case GAD_QUIET_TRANSFER:
  426.  
  427.                     ConfigChanged = TRUE;
  428.  
  429.                     break;
  430.  
  431.                 case GAD_ABORT:
  432.  
  433.                     return(1);
  434.  
  435.                 case GAD_SKIP:
  436.  
  437.                     return(2);
  438.             }
  439.         }
  440.     }
  441.  
  442.     return(0);
  443. }
  444.